home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / CSMP Digest / volume 1 / csmp-v1-136.txt < prev    next >
Text File  |  1992-12-31  |  43KB  |  1,145 lines

  1. C.S.M.P. Digest             Tue, 07 Jul 92       Volume 1 : Issue 136
  2.  
  3. Today's Topics:
  4.  
  5.     Zooming windows: determining if window is in zoomed state
  6.     Programatically alter Finder menus?
  7.     Slow AppleEvents (was Re: Think C vs. MPW)
  8.     List Manager Bug?
  9.     redirecting keyboard events
  10.     Lempel-Ziv compression question
  11.     Perl with (and without) MPW
  12.     Is Zortech C++ Available For Mac Yet?
  13.     Newcomer questions -- some stuff about a possible programming project
  14.     Passing info between apps
  15.     Where should help files be kept?
  16.  
  17.  
  18.  
  19. -------------------------------------------------------
  20.  
  21. From: peterb@DIALix.oz.au (Peter Broardribb)
  22. Subject: Zooming windows: determining if window is in zoomed state
  23. Organization: DIALix Services, Perth, Western Australia
  24. Date: Sat, 30 May 92 08:21:10 GMT
  25.  
  26. HIN 006 says: "Before closing a movable window, check to see if its location
  27. or size have changed. If so, save the new location and size. If the window
  28. can be zoomed, save the user state and also save whether or not the window
  29. is in the zoomed (standard) state. ..."
  30.  
  31. How do you determine if a window is in the zoomed (standard) state?
  32.  
  33. PETE
  34.  
  35.  
  36. +++++++++++++++++++++++++++
  37.  
  38. From: zben@ni.umd.edu (Charles B. Cranston)
  39. Organization: UM Home for the Terminally Analytical
  40. Date: Mon, 1 Jun 1992 16:38:50 GMT
  41.  
  42. In article <1992May30.082110.4337@DIALix.oz.au>, peterb@DIALix.oz.au (Peter Broardribb) writes:
  43.  
  44. > HIN 006 says: "Before closing a movable window, check to see if its location
  45. > or size have changed. If so, save the new location and size. If the window
  46. > can be zoomed, save the user state and also save whether or not the window
  47. > is in the zoomed (standard) state. ..."
  48.   
  49. > How do you determine if a window is in the zoomed (standard) state?
  50.  
  51. I'm not claiming this code is perfect, but it was my own hack at this.
  52. This program has four kinds of windows, of which three are fixed size
  53. so only LIST windows can be resized at all.  All windows are implemented
  54. as modeless dialogs.
  55.  
  56. #define TOPLEFT(aRect)    (* (Point *) &(aRect).top )
  57. #define BOTRITE(aRect)    (* (Point *) &(aRect).bottom )
  58. #define RECTWIDE(aRect)    ( (aRect).right - (aRect).left )
  59. #define RECTHITE(aRect)    ( (aRect).bottom - (aRect).top )
  60.  
  61. /* Window zoom processing (only LIST windows).
  62.  */
  63. dozoom(WindowPtr windp,short part)
  64. {
  65.     Rect    wrect;
  66.     
  67.     if ( LDLOG == windowtype(windp) ) {
  68.         SetPort(windp);
  69.         if (inZoomOut == part) {
  70.             getstdstate(windp,&wrect);
  71.             (** (WStateData **) (*(WindowPeek)windp).dataHandle ).stdState = wrect;
  72.             }
  73.         ZoomWindow(windp,part,true);
  74.         sizeuserlist(windp);
  75.         InvalRect(&windp->portRect);
  76.     }
  77. }
  78.  
  79. This code does compute the "standard" state but it relies on the window
  80. manager's tracking of zoomed in/zoomed out which is probably not right.
  81. The right thing to do is probably to compare the current window size
  82. against the "standard" size (with an 8 pixel slop!).
  83.  
  84.  
  85. /* Compute "standard state" for resizable (list) window.
  86.  * This is used by the zooming stuff.
  87.  */
  88. getstdstate(WindowPtr windp, Rect *wrect)
  89. {
  90.     Rect    rect;
  91.     GDHandle    thegd, maingd;
  92.     
  93.     getnaturalsize(windp,wrect);
  94.     if (colorqd) {
  95.         thegd = nil;
  96.         getmonitor(TOPLEFT(*wrect),&thegd);
  97.         if ( (nil==thegd) || !PtInRect(BOTRITE(*wrect),&(**thegd).gdRect) ) {
  98.             thegd = maingd = GetMainDevice();
  99.             getmaxmonitor(wrect,&thegd);
  100.             rect = (**thegd).gdRect;
  101.             rect.top += 16;
  102.             if ( maingd == thegd )
  103.                 rect.top += GetMBarHeight();
  104.             InsetRect(&rect,5,5);
  105.             OffsetRect(wrect,rect.left-(*wrect).left,rect.top-(*wrect).top);
  106.             if ( (*wrect).bottom > rect.bottom)
  107.                 (*wrect).bottom = rect.bottom;
  108.             else
  109.                 OffsetRect(wrect,0,(RECTHITE(rect)-RECTHITE(*wrect))/3);
  110.             if ( (*wrect).right > rect.right)
  111.                 (*wrect).right = rect.right;
  112.             else
  113.                 OffsetRect(wrect,(RECTWIDE(rect)-RECTWIDE(*wrect))/2,0);
  114.         }
  115.     } else {
  116.         rect = qd.screenBits.bounds;
  117.         if ( !PtInRect(BOTRITE(*wrect),&rect) ) {
  118.             rect.top += 16 + GetMBarHeight();
  119.             InsetRect(&rect,5,5);
  120.             OffsetRect(wrect,rect.left-(*wrect).left,rect.top-(*wrect).top);
  121.             if ( (*wrect).bottom > rect.bottom)
  122.                 (*wrect).bottom = rect.bottom;
  123.             else
  124.                 OffsetRect(wrect,0,(RECTHITE(rect)-RECTHITE(*wrect))/3);
  125.             if ( (*wrect).right > rect.right)
  126.                 (*wrect).right = rect.right;
  127.             else
  128.                 OffsetRect(wrect,(RECTWIDE(rect)-RECTWIDE(*wrect))/2,0);
  129.         }
  130.     
  131.     }
  132. }
  133.  
  134. The "natural size" is the size of the window if there were no absolute
  135. constraints on the monitor size (if we had an infinitely huge monitor).
  136.  
  137. We find the monitor containing the top left of the window.  If the
  138. natural size fits on this monitor, then the natural size is just
  139. returned as the standard size.  We don't need to zoom in this case.
  140. (This is the new System 7 zooming standard...)
  141.  
  142. If BOTRIGHT is *NOT* on this monitor, we find which monitor contains
  143. most of the window's area (routine getmaxmonitor).  We will try to zoom
  144. to this monitor.  We check to see if the window can be made to fit on
  145. on this monitor (actually within a rectangle 5 points indented on all sizes,
  146.  also indented by menu bar iff this is main monitor).
  147.  
  148. If it can be made to fit on this monitor by moving the top left corner,
  149. we try to center it left/right and put it 1/3 of the way down from the
  150. top.  If it cannot be made to fit, we truncate standard size down to
  151. the actual size available on this monitor.  This computation is done
  152. independantly on the height and width.  The "else" part is basically
  153. the same thing when there is no color QD (so there is only one screen).
  154.  
  155.  
  156. /* Get Graphics Device for monitor containing specified point.
  157.  */
  158. getmonitor(Point thept, GDHandle *thegd)
  159. {
  160.     GDHandle gd;
  161.  
  162.     if (colorqd) {
  163.         for (gd=GetDeviceList(); nil!=gd; gd=GetNextDevice(gd) ) {
  164.             if ( TestDeviceAttribute(gd,screenDevice) &&
  165.                  TestDeviceAttribute(gd,screenActive) &&
  166.                  PtInRect(thept,&(**gd).gdRect)
  167.                )
  168.                 (*thegd) = gd;
  169.         }
  170.     }
  171. }
  172.  
  173. This is used to get the monitor containing the top left of the window.
  174. If there is no color QD it does nothing at all.  BTW all these
  175. TestDeviceAttribute calls are probably overkill.
  176.  
  177.  
  178. /* Get Grapics Device for monitor with max intersection
  179.  * area with specified rectangle.
  180.  */
  181. getmaxmonitor(Rect *wrect, GDHandle *thegd)
  182. {
  183.     int        area, maxar;
  184.     Rect    rect;
  185.     GDHandle    gd;
  186.  
  187.     if (colorqd) {
  188.         maxar = 0;
  189.         for (gd=GetDeviceList(); nil!=gd; gd=GetNextDevice(gd) ) {
  190.             if ( TestDeviceAttribute(gd,screenDevice) &&
  191.                  TestDeviceAttribute(gd,screenActive) &&
  192.                  SectRect(wrect,&(**gd).gdRect,&rect)
  193.                ) {
  194.                 area = RECTHITE(rect) * RECTWIDE(rect);
  195.                 if (area > maxar) {
  196.                     maxar = area;
  197.                     (*thegd) = gd;
  198.                 }
  199.             }
  200.         }
  201.     }
  202. }
  203.  
  204. /* Get the natural (zoomed) size of a window.
  205.  * For anything but a list window this will be its current size.
  206.  */
  207. getnaturalsize(WindowPtr windp, Rect *wrect)
  208. {
  209.     ListHandle lhand;
  210.  
  211.     getwindowrect(windp,wrect);
  212.     if (LDLOG == windowtype(windp) ) {
  213.         lhand = (* (lwptr) windp).lhand;
  214.         (*wrect).right = (*wrect).left + (*(lwptr) windp).maxwid + 16 + 5 + 5;
  215.         (*wrect).bottom = (*wrect).top +
  216.             (**lhand).dataBounds.bottom * (**lhand).cellSize.v + 16 + 5 + 5;
  217.     }
  218. }
  219.  
  220. This is pretty much specific to the application.  A LIST window contains a
  221. list-manager list, so the natural size is a size big enough to hold the 
  222. entire list (dataBounds.bottom * cellSize.v) plus scrollers and margin...
  223.  
  224.  
  225. Sorry about the size of this posting.  I couldn't seem to figure out a way
  226. to do it in less code...
  227.  
  228.  
  229. +++++++++++++++++++++++++++
  230.  
  231. From: Jeremiah.Blatz@dartmouth.edu (Jeremiah Blatz)
  232. Date: 6 Jun 92 03:31:33 GMT
  233. Organization: Dartmouth College, Hanover, NH
  234.  
  235. In article <1992May30.082110.4337@DIALix.oz.au>
  236. peterb@DIALix.oz.au (Peter Broardribb) writes:
  237.  
  238. > HIN 006 says: "Before closing a movable window, check to see if its location
  239. > or size have changed. If so, save the new location and size. If the window
  240. > can be zoomed, save the user state and also save whether or not the window
  241. > is in the zoomed (standard) state. ..."
  242. >  
  243. > How do you determine if a window is in the zoomed (standard) state?
  244. >  
  245. > PETE
  246.  
  247. Well, you know the coordinates if the window (you specified them when
  248. you set them), and when you resize a window, you specify its
  249. coordinates...
  250.  
  251. Jeremiah
  252.  
  253. +++++++++++++++++++++++++++
  254.  
  255. From: keith@taligent.com (Keith Rollin)
  256. Date: 6 Jun 92 23:36:30 GMT
  257. Organization: Taligent
  258.  
  259.  
  260. In article <1992May30.082110.4337@DIALix.oz.au>
  261. peterb@DIALix.oz.au (Peter Broardribb) writes:
  262.  
  263. > HIN 006 says: "Before closing a movable window, check to see if its location
  264. > or size have changed. If so, save the new location and size. If the window
  265. > can be zoomed, save the user state and also save whether or not the window
  266. > is in the zoomed (standard) state. ..."
  267. >  
  268. > How do you determine if a window is in the zoomed (standard) state?
  269. >  
  270. > PETE
  271.  
  272. First, get two rectangles. Get the window's portRect and convert it to global
  273. coordinates. Then get the stdState rect from the WStateHandle in the
  274. WindowRecord (the WStateHandle is stored in the WindowRecord's dataHandle field
  275. on windows with a zoom box). That rectangle expresses the size and location of
  276. the window in global coordinates when it is zoomed.
  277.  
  278. What you want to do next is see if the current portRect is close enough to the
  279. zoomed Rect to have the Window Manager think the window is zoomed. This is done
  280. by comparing the coordinates of the two rectangles. According to Inside Mac IV
  281. (page 10, I think), if the current rectangle is within 7 pixels of the zoom
  282. rectangle, then the window is considered zoomed.
  283.  
  284. The easiest way to perform this comparison is to form a rect from the top-left
  285. corner of the zoomRect, call Inset(-7, -7), and then pass the resulting
  286. rectangle to PtInRect, with the top-left corner of the of the currentRect as the
  287. Point parameter. If PtInRect() returns TRUE, perform the same test on the
  288. lower-right corner. If the second test returns TRUE, then the window can be
  289. considered in the "zoomed" state.
  290.  
  291. If you check the standard WDEF proc (posted on ftp.apple.com), you'll see that
  292. that's pretty much how the system makes the same determination.
  293.  
  294. - --
  295. Keith Rollin
  296. Phantom Programmer
  297. Taligent, Inc.
  298.  
  299.  
  300. ---------------------------
  301.  
  302. From: Cameron Esfahani <dirty@engin.umich.edu>
  303. Subject: Programatically alter Finder menus?
  304. Date: Sat, 06 Jun 92 02:34:36 EDT
  305. Organization: caen
  306.  
  307. Does anyone know if it is possible to programatically alter the Finders'
  308. menus?
  309. I am writing an init which would change the text of some menu items.  The
  310. problem
  311. is that I can't access the menu handles.  GetMenu wants to have the menus
  312. be in
  313. a 'MENU' resource and the Finder has it's menusin 'fmnu'.  Does anyone
  314. have any
  315. suggestions?
  316.  
  317. Thanks,
  318.  
  319. Cameron Esfahani
  320.  
  321. +++++++++++++++++++++++++++
  322.  
  323. From: keith@taligent.com (Keith Rollin)
  324. Date: 6 Jun 92 23:40:17 GMT
  325. Organization: Taligent
  326.  
  327. In article <-Z#-w-_@engin.umich.edu>, dirty@engin.umich.edu (Cameron Esfahani)
  328. writes:
  329. > Does anyone know if it is possible to programatically alter the Finders'
  330. > menus?
  331. > I am writing an init which would change the text of some menu items.  The
  332. > problem
  333. > is that I can't access the menu handles.  GetMenu wants to have the menus
  334. > be in
  335. > a 'MENU' resource and the Finder has it's menusin 'fmnu'.  Does anyone
  336. > have any
  337. > suggestions?
  338.  
  339. I know that the INIT "The Grouch" does this. It patches MenuSelect, and sets up
  340. the menus the way it wants them before proceeding to the real MenuSelect code.
  341. You might want to disassemble it and see if it helps you out.
  342.  
  343. Getting the menu handles is not tough. Just call GetMHandle. That returns to you
  344. a real, live menu handle that exists in the menubar. This assumes that you can
  345. get away with setting the menu items on the fly, and don't need to munge the
  346. 'fmnu' resources.
  347.  
  348. - --
  349. Keith Rollin
  350. Phantom Programmer
  351. Taligent, Inc.
  352.  
  353.  
  354. ---------------------------
  355.  
  356. From: ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  357. Subject: Slow AppleEvents (was Re: Think C vs. MPW)
  358. Date: 2 Jun 92 19:52:34 +1200
  359. Organization: University of Waikato, Hamilton, New Zealand
  360.  
  361. In article <26001@goofy.Apple.COM>, ksand@apple.com (Kent Sandvik) writes:
  362. > Anyway, my point was that I don't see a future where AEs carry around file
  363. > information, instead pointers where to fetch the data (file system yak,
  364. > data base, better, object oriented database with persistant data, future).
  365.  
  366. Another thing you can do right now (for those needing to pass large amounts
  367. of data) is pass across a PPC port specification in an AppleEvent, and use
  368. that to establish a connection which is used for higher-speed data transfer.
  369.  
  370. At least, that's the network-transparent way.
  371.  
  372. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  373. Computer Services Dept                     fax: +64-7-838-4066
  374. University of Waikato            electric mail: ldo@waikato.ac.nz
  375. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  376. I'm not fond of benchmarks. I prefer my schmarks to be straight.
  377.  
  378. +++++++++++++++++++++++++++
  379.  
  380. From: d88-jwa@dront.nada.kth.se (Jon W{tte)
  381. Date: 2 Jun 92 19:03:29 GMT
  382. Organization: Royal Institute of Technology, Stockholm, Sweden
  383.  
  384. .ac.nz> ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) writes:
  385.  
  386.    > Anyway, my point was that I don't see a future where AEs carry around file
  387.    > information, instead pointers where to fetch the data (file system yak,
  388.    > data base, better, object oriented database with persistant data, future).
  389.  
  390.    Another thing you can do right now (for those needing to pass large amounts
  391.    of data) is pass across a PPC port specification in an AppleEvent, and use
  392.    that to establish a connection which is used for higher-speed data transfer.
  393.  
  394. Why carry it around ? Just check the return address targetID...
  395.  
  396. - -- 
  397. h++ - new and improved ! And now on VACCATION !!!
  398. (My first for, oh, three years !)
  399.  
  400. +++++++++++++++++++++++++++
  401.  
  402. From: ksand@apple.com (Kent Sandvik)
  403. Date: 5 Jun 92 01:50:28 GMT
  404. Organization: MacDTS Mongols
  405.  
  406. In article <1992Jun2.195234.8382@waikato.ac.nz>, ldo@waikato.ac.nz (Lawrence
  407. D'Oliveiro, Waikato University) writes:
  408. > In article <26001@goofy.Apple.COM>, ksand@apple.com (Kent Sandvik) writes:
  409. > > Anyway, my point was that I don't see a future where AEs carry around file
  410. > > information, instead pointers where to fetch the data (file system yak,
  411. > > data base, better, object oriented database with persistant data, future).
  412. > Another thing you can do right now (for those needing to pass large amounts
  413. > of data) is pass across a PPC port specification in an AppleEvent, and use
  414. > that to establish a connection which is used for higher-speed data transfer.
  415.  
  416. True, this is the way DTS separates the use of PPC and AEs, PPC for the 
  417. grunt work (forwarding of huge data segments, sound, video conferences,
  418. quicktime movies) while AEs are the smart intelligent messages telling
  419. applications what they should do.
  420. - --
  421.                                               Cheers, Kent
  422.  
  423.  
  424. +++++++++++++++++++++++++++
  425.  
  426. From: potts@itl.itd.umich.edu (Paul Potts)
  427. Organization: Instructional Technology Laboratory, University of Michigan
  428. Date: Fri, 5 Jun 92 13:38:56 GMT
  429.  
  430. In article <26310@goofy.Apple.COM> ksand@apple.com (Kent Sandvik) writes:
  431. >In article <1992Jun2.195234.8382@waikato.ac.nz>, ldo@waikato.ac.nz (Lawrence
  432. >D'Oliveiro, Waikato University) writes:
  433. >> 
  434. >> Another thing you can do right now (for those needing to pass large amounts
  435. >> of data) is pass across a PPC port specification in an AppleEvent, and use
  436. >> that to establish a connection which is used for higher-speed data transfer.
  437.  
  438.  
  439. OK, does anyone have some sample code that does this? I was able to plow through
  440. the AppleEvents chapter in I-M 6 (after about three readings), but using the
  441. PPC Toolbox looks... well, much more dense...
  442.  
  443. If it is on ETO or a developer disk and I haven't seen it yet, just give a 
  444. pointer to it. (or a handle... : )
  445.  
  446.  
  447. - -- 
  448. The essence of OOP: "With all this horse manure, I know there's got to be
  449.                      a pony in here somewhere!"
  450. Paul R. Potts, Software Designer --- potts@itl.itd.umich.edu <--- me!
  451.  
  452. +++++++++++++++++++++++++++
  453.  
  454. From: ksand@apple.com (Kent Sandvik)
  455. Date: 7 Jun 92 00:55:23 GMT
  456. Organization: MacDTS Mongols
  457.  
  458. In article <1992Jun5.133856.16799@terminator.cc.umich.edu>,
  459. potts@itl.itd.umich.edu (Paul Potts) writes:
  460. > OK, does anyone have some sample code that does this? I was able to plow
  461. through
  462. > the AppleEvents chapter in I-M 6 (after about three readings), but using the
  463. > PPC Toolbox looks... well, much more dense...
  464.  
  465. > If it is on ETO or a developer disk and I haven't seen it yet, just give a 
  466. > pointer to it. (or a handle... : )
  467.  
  468. Check for the samples on developer CD, under System 7 samples. For instance
  469. the Kibitz sample should have working PPC C code. These samples are also
  470. on the ftp.apple.com server.
  471. - --
  472.                                               Cheers, Kent
  473.  
  474.  
  475. ---------------------------
  476.  
  477. From: jpugh@apple.com (Jon Pugh)
  478. Subject: List Manager Bug?
  479. Date: 3 Jun 92 21:16:11 GMT
  480. Organization: Apple Co.
  481.  
  482. I've noticed this one years ago and I was just reminded of it by NewsWatcher,
  483. which uses the List Manager.  It also shows up in Standard File.
  484.  
  485. Double click on a list item but hold the second click down without letting it
  486. up.  Now drag, changing the selected item.  When you let up, it will think
  487. you double clicked on the last item selected.
  488.  
  489. In Standard File under system 6.0.x you can even drag to the scroll bar and 
  490. let it up for weirder results.  SFGetFile will return with good = true but 
  491. no file name.  It screws up almost everyone.  This part was fixed in 7.0.
  492.  
  493. I think the dragging is fine, but I think you ought to only get a double
  494. click if you start the double click on the same item you finish it on.
  495.  
  496. Just thought I would whine about it again.
  497.  
  498. Jon
  499.  
  500. +++++++++++++++++++++++++++
  501.  
  502. From: omh@cs.brown.edu (Owen M. Hartnett)
  503. Organization: Brown University Department of Computer Science
  504. Date: Sat, 6 Jun 1992 00:59:41 GMT
  505.  
  506. Hey! Let's bash the List Manager!!
  507.  
  508. Not only that, but if you mouse down and drag, it thinks that the selection
  509. is the thing that you moused down on, but the visual selection (the highlighted
  510. cell) is where you let up on.
  511.  
  512. Hold it!  The List Manager Demands Equal Time!!!
  513.  
  514. The List Manager Anti Defamation Society would like to point out, in the
  515. List Manager's defense, that it is perfectly capable of handling lists
  516. with 18,000 records or so, provided that you don't store the data in the
  517. list.
  518.  
  519. I have done this, and lived to tell of it.
  520.  
  521. - -Owen
  522. Both Friend and Foe to the List Manager
  523. Owen Hartnett                omh@cs.brown.edu
  524. "FAITH, n. Belief without evidence in what is told by one who speaks
  525.         without knowledge, of things without parallel."
  526.             -Ambrose Bierce - The Devil's Dictionary
  527.  
  528. ---------------------------
  529.  
  530. From: mike@zorch.SF-Bay.ORG (Mike Smithwick)
  531. Subject: redirecting keyboard events
  532. Organization: SF-Bay Public-Access Unix
  533. Date: Thu, 4 Jun 1992 01:07:03 GMT
  534.  
  535. []
  536.  
  537. I open up a small modeless dialog and find that in order to get it to accept
  538. any events the mouse pointer must be over the window. Not very handy for
  539. some small windows which can be controlled entire by the keyboard. This
  540. forces the user to grab for the mouse and move it over the panel more
  541. than he should, defeating the purpose of default buttons, etc.
  542.  
  543. It stands to reason that the window that is active SHOULD be the one receiving
  544. events, but I guess that's not the case. So is there anyway to force this?
  545.  
  546.  
  547. mike
  548.   
  549. - -- 
  550. "There is no problem too big that can't be solved with high explosives"-Rush
  551.  
  552. Mike Smithwick - ames!zorch!mike
  553.  
  554.  
  555. +++++++++++++++++++++++++++
  556.  
  557. From: keith@taligent.com (Keith Rollin)
  558. Date: 4 Jun 92 20:06:53 GMT
  559. Organization: Taligent
  560.  
  561. In article <1992Jun4.010703.955@zorch.SF-Bay.ORG>, mike@zorch.SF-Bay.ORG (Mike
  562. Smithwick) writes:
  563. > I open up a small modeless dialog and find that in order to get it to accept
  564. > any events the mouse pointer must be over the window. Not very handy for
  565. > some small windows which can be controlled entire by the keyboard. This
  566. > forces the user to grab for the mouse and move it over the panel more
  567. > than he should, defeating the purpose of default buttons, etc.
  568. > It stands to reason that the window that is active SHOULD be the one receiving
  569. > events, but I guess that's not the case. So is there anyway to force this?
  570.  
  571. You should probably post the relevent parts of your source code. Your conclusion
  572. that the cursor has to be over the dialog is incorrect. A dialog can accept
  573. events no matter where the mouse is.
  574.  
  575. - --
  576. Keith Rollin
  577. Phantom Programmer
  578. Taligent, Inc.
  579.  
  580. ---------------------------
  581.  
  582. From: rrwood@uuisis.isis.org (Roy Wood)
  583. Subject: Lempel-Ziv compression question
  584. Date: 30 May 92 13:58:20 GMT
  585. Organization: International Shared Information Service (Ottawa)
  586.  
  587. I'm trying to port the Lempel-Ziv compression routine to the Mac for a
  588. program I'm working on, and I'm having a bit of trouble.  Basically, the
  589. uncompress code works correctly 98% of the time-- but there's that annoying
  590. 2% of the time when it doesn't!  I've looked over the code for a couple of
  591. days, but I'm stumped.  Does anyone have any ideas what *might* cause such a
  592. spurious error?  It's not the compressed file-- that definitely is not
  593. corrupted (I've checked).
  594.  
  595. Alternatively, has anyone already written this code?  And would you be
  596. willing to share a copy with me?
  597.  
  598. Thanks....
  599.  
  600. - -Roy Wood
  601.  
  602. +++++++++++++++++++++++++++
  603.  
  604. From: dawson@cs.cornell.edu (Dawson Dean)
  605. Date: 4 Jun 92 21:26:56 GMT
  606. Organization: Cornell Univ. CS Dept, Ithaca NY 14853
  607.  
  608. >I'm trying to port the Lempel-Ziv compression routine to the Mac for a
  609. >program I'm working on, and I'm having a bit of trouble.  Basically, the
  610. >uncompress code works correctly 98% of the time-- but there's that annoying
  611. >2% of the time when it doesn't!  I've looked over the code for a couple of
  612. >days, but I'm stumped.  Does anyone have any ideas what *might* cause such a
  613. >spurious error?  It's not the compressed file-- that definitely is not
  614. >corrupted (I've checked).
  615. >
  616. >Alternatively, has anyone already written this code?  And would you be
  617. >willing to share a copy with me?
  618.  
  619. You don't give a good description of your problem, so it may be anything.
  620. I had a few problems writing lzrw like this, but they usually ended up
  621. something weird like the dictionary overflowing.
  622.  
  623. Have you tried lzrw? That's a variation of lzw written by Ross Williams
  624. that is very good. I think that there are now 5 versions (lzrw1, ..., lzrw5)
  625. which make various tradeoffs of speed and compression ratio. Basically,
  626. if you want it to be blindingly fast you sacrifice some compression. 
  627.  
  628. Anyway, the source for all of these are available, and you can get versions
  629. in C or 68K assembler (I think he used Think C 4.0 for the C version,
  630. but I'm not sure and it doesn't matter since he used standard C).
  631. You can check archie for archives, but the official archive is shown below...
  632.  
  633.  
  634. Here is the README file that is distributed with lzrw....
  635.  
  636. - ------------------------------------------------------------------------
  637.  
  638. DATA COMPRESSION DIRECTORY
  639. ==========================
  640. Date   : 04-Apr-1992.
  641. Author : Ross Williams (ross@spam.ua.oz.au)
  642.  
  643. This file gives an overview of the data compression directory of the
  644. anonymous ftp archive located at the University of Adelaide, South
  645. Australia. The exact location of the directory is:
  646.  
  647.    Machine   : sirius.itd.adelaide.edu.au    [IP=129.127.40.3]
  648.    Directory : pub/compression
  649.  
  650. The directory mostly contains public domain data compression
  651. algorithms developed by Ross Williams during early 1991. It also
  652. contains one or two other items of interest.
  653.  
  654. The files in this directory may be compressed. Files that are
  655. compressed will have names terminating with ".Z" and will have to be
  656. uncompressed before use (using the Unix "uncompress" command). I
  657. wouldn't trust my files to a data compression algorithm :-), but the
  658. system programmer who put the files there for me (I do not have direct
  659. control over this archive) seems to think that it is a good idea.
  660.  
  661. Ross Williams
  662. 21-Aug-1991
  663.  
  664. 0readme         - This descriptive file.
  665. dc_stan_just    - Justification of dc_stan_spec.
  666. dc_stan_spec    - Proposal for data compression interface standard.
  667. dc_stan_stream  - Revised proposed standard.
  668. dcc91_report    - Report on 1991 Data Compression Conference.
  669. fast_copy.68000 - Fast block move routine for 68000 microprocessor.
  670. lzrw1-a.68000   - LZRW1-A algorithm implemented in 68000 assembler.
  671. lzrw1-a.c       - LZRW1-A algorithm implemented in C
  672. lzrw1-a.txt     - Release notes for LZRW1-A algorithm.
  673. lzrw1.68000     - LZRW1 algorithm implemented in 68000 assembler.
  674. lzrw1.c         - LZRW1 algorithm implemented in C.
  675. lzrw1.tex       - DCC91 conference paper describing LZRW1 algorithm.
  676. lzrw2.c         - LZRW2 algorithm implemented in C.
  677. lzrw2.txt       - Release notes for LZRW2 algorithm.
  678. lzrw3-a.c       - LZRW3-A algorithm implemented in C.
  679. lzrw3-a.txt     - Release notes for LZRW3-A algorithm.
  680. lzrw3.c         - LZRW3 algorithm implemented in C.
  681. lzrw3.txt       - Release notes for LZRW3 algorithm.
  682. lzrw4.txt       - Description of LZRW4 algorithm (not yet implemented).
  683. lzrw45_covering - Release notes for LZRW4 and LZRW5 descriptions.
  684. lzrw5.txt       - Description of LZRW5 algorithm (not yet implemented).
  685. lzrw_headers.h  - Header files (.h files) for C code.
  686. puzzlebox_provpatent - Provisional patent for puzzle box.
  687. rw_info         - Information about Ross Williams and his activities.
  688.  
  689. WARNING: A patent has recently arisen that may cover one or more of
  690. these algorithms. Please refer to the file rw_info for more
  691. information.
  692.  
  693. - --<End of 0readme file for the compression directory>
  694.  
  695.  
  696. - -- 
  697. ******************************************************************
  698. Dawson Dean                       Internet: dawson@cs.cornell.edu
  699. Dept. of Computer Science         Office:   (607) 255-1179
  700. Cornell University
  701.  
  702. ---------------------------
  703.  
  704. From: orrman@carson.u.washington.edu (Michael Orr)
  705. Subject: Perl with (and without) MPW
  706. Organization: University of Washington
  707. Date: Thu, 4 Jun 1992 06:14:57 GMT
  708.  
  709. I have received several requests regarding where the macPerl is
  710. located, so I am going to post the information.  I got this off
  711. Archie:
  712.  
  713. Host nic.switch.ch
  714.  
  715.     Location: /software/mac
  716.       DIRECTORY drwxrwxr-x        512  Jan 24 16:32  perl
  717.  
  718. This appears to be the only site that has it (not sumex, not any of
  719. the usual places).  Perhaps someone who is familiar with the upload
  720. process could forward it to the usual macSites so that this poor site
  721. won't be jammed full.  It includes MPW code and a standalone version.
  722. The standalone version is apparently very limited.  I have not had an
  723. opportunity to run either of them yet.  But I am excited to be able to
  724. try out Perl, which I am learning on a unix system, on my very own mac.
  725.  
  726. Mike Orr  (orrman@u.washington.edu)
  727. "Heroes in a half-shell... Perl power!" :)
  728.  
  729. +++++++++++++++++++++++++++
  730.  
  731. From: neeri@iis.ethz.ch (Matthias Neeracher)
  732. Organization: Integrated Systems Laboratory, ETH, Zurich
  733. Date: Thu, 4 Jun 1992 12:24:39 GMT
  734.  
  735. In article <1992Jun4.061457.11351@u.washington.edu> orrman@carson.u.washington.edu (Michael Orr) writes:
  736. >I have received several requests regarding where the macPerl is
  737. >located, so I am going to post the information.
  738.  
  739. Time for another shameless plug, then...
  740.  
  741. >I got this off
  742. >Archie:
  743. >
  744. >Host nic.switch.ch
  745. >    Location: /software/mac
  746. >      DIRECTORY drwxrwxr-x        512  Jan 24 16:32  perl
  747. >
  748. >This appears to be the only site that has it (not sumex, not any of
  749. >the usual places).
  750.  
  751. There are at least two more sites who have it:
  752.  
  753. Host wuarchive.wustl.edu
  754. File mirrors/rascal.ics.utexas.edu/programming/Perl_402_MPW_CPT_bin
  755.  
  756. Host toklab.ics.osaka-u.ac.jp (Probably not a good idea to go there, though)
  757. File /mac/info-mac/info-mac/new1992/01/Perl_402_MPW_CPT_bin
  758.  
  759. There used to be a site in Sweden also, but this one shouldn't be accessed
  760. from the US (For nic.switch.ch, this is not such a big problem).
  761.  
  762. >Perhaps someone who is familiar with the upload
  763. >process could forward it to the usual macSites so that this poor site
  764. >won't be jammed full.
  765.  
  766. I must admit I was somewhat lazy, so I only distributed it to sites with
  767. ftp upload capability. Also, the current version suffers from bad packaging.
  768. Most sites are not exactly delighted about an 1.6M binhex archive of some
  769. obscure Unix programming language.
  770.  
  771. I'll take offers from ftp sites any time, though :-)
  772.  
  773. >The standalone version is apparently very limited.
  774.  
  775. Definitely. Essentially a pure batch thing.
  776.  
  777. Matthias
  778.  
  779. - -----
  780. Matthias Neeracher                                      neeri@iis.ethz.ch
  781.    "ARGV:  What you say to the dentist when the Novocaine isn't working"
  782.                                    -- Larry Wall, _Programming Perl_
  783.  
  784. ---------------------------
  785.  
  786. From: lam@saifr00.cfsat.honeywell.com (Josh Lam)
  787. Subject: Is Zortech C++ Available For Mac Yet?
  788. Date: 4 Jun 92 20:08:07 GMT
  789. Organization: Honeywell Air Transport Systems Division
  790.  
  791. Hi,
  792.  
  793. I understand that Zortech is now under Symantec and recently in the
  794. newsgroups there were mentioned about Zortech C++ on Mac.
  795.  
  796. Is the Zortech C++ compiler available for the Mac yet?  If it is and if
  797. someone has used it, I would really appreciate any comments on it.
  798.  
  799. Thanks!
  800.  
  801.  
  802. - -- 
  803. Josh Lam
  804. Honeywell Inc
  805. lam@saifr00.cfsat.honeywell.com
  806.  
  807. +++++++++++++++++++++++++++
  808.  
  809. Organization: University of Maine System
  810. Date: Thursday, 4 Jun 1992 22:48:27 EDT
  811. From: <IO80209@MAINE.MAINE.EDU>
  812.  
  813.  
  814. In article <1992Jun4.200807.18653@saifr00.cfsat.honeywell.com>,
  815. lam@saifr00.cfsat.honeywell.com (Josh Lam) says:
  816. >
  817. >Hi,
  818. >
  819. >I understand that Zortech is now under Symantec and recently in the
  820. >newsgroups there were mentioned about Zortech C++ on Mac.
  821. >
  822. >Is the Zortech C++ compiler available for the Mac yet?  If it is and if
  823. >someone has used it, I would really appreciate any comments on it.
  824.  
  825. Yes, Symantec's Zortech C++ v2.1 for the Macintosh was released early
  826. this year.  According to our vendor, version 3.0 or something like it
  827. was supposed to be released by early summer, but since we have not
  828. received it, I cannot say for sure.  I can (and will) comment on v2.1,
  829. however.
  830.  
  831. As you may know, Zortech C++ for the Mac runs inside Apple's MPW shell,
  832. which will set you back over $200 if you buy both the command shell and
  833. the SADE debugger.  Without the shell, Zortech is useless, and without the
  834. debugger, you may find it difficult to cope.  If you have not used the MPW
  835. shell before, be advised that it is one of the most un-Mac like programs
  836. I've ever used.  It relies heavily on command line control.  A UNIX user
  837. would feel right at home.  As far as the Zortech compiler is concerned,
  838. I am told that it is faster that MPW C, can compile C++ (native code) and
  839. ANSI C, and is compatible with SADE.  I cannot say more about the Mac
  840. product as I prefer THINK C 5.0 for Mac development, as it seems faster
  841. and far simpler.  If you need real C++ though, Zortech seems to be the
  842. compiler of choice.
  843.  
  844. One last note:  I HAVE used Zortech on DOS machines, and liked it a lot.
  845. It was powerful, fast, and flexible, and was ATT C++ compliant (or whatever).
  846. Having a great deal of faith in Symantec, I would say the Mac version is
  847. probably about as good, except for the interface.
  848.  
  849. - ----------------------------------------------------------------
  850. Todd Rowell
  851. "I ache, therefore I am.  Or in my case I am, therefore I ache."
  852.  - Marvin, the Paranoid Android
  853.  
  854.                     if("Todd Rowell" == IO80209@MAINE.MAINE.EDU)
  855.                         exit(0);
  856. - ----------------------------------------------------------------
  857.  
  858. +++++++++++++++++++++++++++
  859.  
  860. From: nagle@netcom.com (John Nagle)
  861. Date: 5 Jun 92 05:17:44 GMT
  862. Organization: Netcom - Online Communication Services  (408 241-9760 guest)
  863.  
  864. IO80209@MAINE.MAINE.EDU writes:
  865. >One last note:  I HAVE used Zortech on DOS machines, and liked it a lot.
  866. >It was powerful, fast, and flexible, and was ATT C++ compliant (or whatever).
  867. >Having a great deal of faith in Symantec, I would say the Mac version is
  868. >probably about as good, except for the interface.
  869.  
  870.        Sadly, no.  The DOS product is excellent.  The Mac product is awful.
  871. I've posted in detail on this subject in the past.  
  872.  
  873.                     John Nagle
  874.  
  875. ---------------------------
  876.  
  877. From: sgilley@cbnewsl.cb.att.com (The Idealistic Cynic)
  878. Subject: Newcomer questions -- some stuff about a possible programming project
  879. Date: 4 Jun 92 17:43:32 GMT
  880. Organization: AT&T Bell Labs, Columbus, Ohio
  881.  
  882.  
  883. Ok's here what's going on (sort of):
  884.  
  885. A friend of mine and I are considering taking on a project
  886. to developement graphic adventure style educational games.
  887.  
  888. The problem is that while we're both professional programmers,
  889. and have each had experience on some type of PC and windowing
  890. system, we're not familier with Mac's, nor do we know much
  891. about writing software that does good things with animation.
  892.  
  893. As a preliminary to a meeting we'll be involved in, we'd like
  894. to ask a few (hopefully) simple questions.
  895.  
  896. In answering the questions, please keep in mind that while this
  897. is being funded by outside people, it is also being funded by
  898. a University, and they aren't going to want to buy more hardware
  899. or spend more money than they absolutely have to.
  900.  
  901.     1) What might be considered a minimum hardware
  902.        configuration for developement of a graphic
  903.        adventure game?
  904.  
  905.     2) We're both C/Unix programmers professionally; what
  906.        version of C would would be a good choice?  Are there
  907.        other languages we should consider?
  908.  
  909.     3) What are the best books on doing graphics and graphics
  910.        animation on the Mac?
  911.  
  912.     4) In browsing the group I noticed a post that seemed to
  913.        indicate that there are Unix-type tools available.  Is
  914.        this true?  If so, it would probably cut developement time
  915.        for the initial demo down some.
  916.  
  917.     5) Lastly: Considering that
  918.  
  919.         a) We are both competant programmers, familier with
  920.            several languages
  921.  
  922.         b) Neither of us has done *any* programming work on a
  923.            Mac before
  924.  
  925.        Do you believe that three months is too short of a time to
  926.        produce a smal, yet functional, demo?  (Say, 5 "rooms", the
  927.        character able to walk around inside the rooms directed by
  928.        the mouse, a couple of puzzles, and maybe a second, computer
  929.        controlled character to talk to once.)
  930.  
  931. I'll keep watch on this group for a while, but would prefer you email
  932. to either myself (address below) or to Bill Stoll at the following
  933. address:
  934.  
  935.     wws@cblph.att.com, wws@cblph.cb.att.com
  936.  
  937. Thanks for your input,
  938.  
  939. Sean.
  940.  
  941. - ---
  942. Sean L. Gilley
  943. att!cblph!sunray!slg,   slg@sunray[.cb].att.com,  attmail!sgilley
  944. 614 236 5031 (h), 614 860 5743 (w)
  945.  
  946. +++++++++++++++++++++++++++
  947.  
  948. From: davids@c3.lanl.gov (David Simmons)
  949. Date: 4 Jun 92 23:00:35 GMT
  950. Organization: Los Alamos National Laboratory
  951.  
  952. In article <1992Jun4.174332.7899@cbnewsl.cb.att.com>, sgilley@cbnewsl.cb.att.com (The Idealistic Cynic) writes:
  953. |> 
  954. |> Ok's here what's going on (sort of):
  955. |> 
  956. |> A friend of mine and I are considering taking on a project
  957. |> to developement graphic adventure style educational games.
  958. |> [stuff deleted...]
  959. |>         a) We are both competant programmers, familier with
  960. |>            several languages
  961.  
  962. English, apparently, not being one of them. ;-)
  963.  
  964. - -- 
  965.  
  966.  
  967. David G. Simmons
  968. davids@lanl.gov
  969.  
  970. "Any resemblance to real opinions is purely coincidental"
  971.  
  972. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  973. "My ethicator machine must've had a built-in moral compromise spectral
  974. release phantasmatron!  I'm a genius!"
  975.  
  976. "Another casualty of applied metaphysics"
  977.  
  978.         Calvin & Hobbes (respectively)
  979. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  980.  
  981. ---------------------------
  982.  
  983. From: yandell@ecr.mu.oz.au (Peter YANDELL)
  984. Subject: Passing info between apps
  985. Date: 5 Jun 92 03:29:44 GMT
  986. Organization: Computer Science, University of Melbourne, Australia
  987.  
  988.  
  989.     I want to develop a pseudo command line for my little SE/30.  To do this I
  990. need to be able to pass information backwards and forwards between applications
  991. when they run and terminate.  Anyone with any bright ideas?  I'm working in C
  992. and assembly (THINK C 4.0).
  993.  
  994.     First of all, I'm running System 6.0.7 and I don't want to here about all
  995. the fancy tricks you can do with System 7 (tuneup 1.1.1.1.1.1.1.1.1.....) so
  996. don't bother mailing me any ideas along those lines.
  997.  
  998.     Second requirement is, I have to be able to do it all in memory.  I don't
  999. want to dump the info to be passed to a file on disk, even on a hard disk. Maybe
  1000. the speed isn't toooo bad, but I'm against it for religious reasons.
  1001.  
  1002. Third, it doesn't have to be Apple correct.  It is NEVER going to get released
  1003. and I'm not worried about what it clashes with because it's probably going to be
  1004. used under a minimal system anyway.
  1005.  
  1006.     On a kind of related point, is there any way to trick my Mac into letting me
  1007. open more than one copy of an application at a time?  (Did somebody say Unix?)
  1008.  
  1009.     For anyone who's interested, my friend and I are building a machine and
  1010. writing an OS for it and I want to use my Mac to do some serious development.
  1011. The reason for the command line stuff is, I'm porting public domain compilers
  1012. and bits and pieces from all over the place and I need the power of a command
  1013. line to link all the bits together and let me download to an EPROM burner.  It
  1014. would also mean that I don't have to spend hours converting things to work with
  1015. Mac like interfaces.
  1016.  
  1017.     Thanks for allowing me this little bit of self-indulgence.  I've just got
  1018. into this news stuff and I have to say I'm really enjoying it!
  1019.  
  1020.  
  1021. PLEASE E-MAIL REPLIES DIRECTLY TO:
  1022.  
  1023. =>     \  /
  1024.    Big  \/      -->  yandell@ecr.mu.oz.au  <--
  1025.    Pete /
  1026.        / .             (OK, so I don't have a real signature!)
  1027.  
  1028. +++++++++++++++++++++++++++
  1029.  
  1030. From: ksand@apple.com (Kent Sandvik)
  1031. Date: 5 Jun 92 23:46:31 GMT
  1032. Organization: MacDTS Mongols
  1033.  
  1034. In article <9215713.5020@mulga.cs.mu.OZ.AU>, yandell@ecr.mu.oz.au (Peter
  1035. YANDELL) writes:
  1036. >     I want to develop a pseudo command line for my little SE/30.  To do this I
  1037. > need to be able to pass information backwards and forwards between
  1038. applications
  1039. > when they run and terminate.  Anyone with any bright ideas?  I'm working in C
  1040. > and assembly (THINK C 4.0).
  1041.  
  1042. >     First of all, I'm running System 6.0.7 and I don't want to here about all
  1043. > the fancy tricks you can do with System 7 (tuneup 1.1.1.1.1.1.1.1.1.....) so
  1044. > don't bother mailing me any ideas along those lines.
  1045.  
  1046. >     Second requirement is, I have to be able to do it all in memory.  I don't
  1047. > want to dump the info to be passed to a file on disk, even on a hard disk.
  1048. Maybe
  1049. > the speed isn't toooo bad, but I'm against it for religious reasons.
  1050.  
  1051. You could try to reinvent Apple Events!
  1052. - --
  1053.                                               Cheers, Kent
  1054.  
  1055. PS: OK, OK, I'm serious now, a driver which accepts a simple protocol might do
  1056. what you want. Load the driver in the system heap, and send information using
  1057. Control between the applications. Implement semaphor handling as well!
  1058.  
  1059. ---------------------------
  1060.  
  1061. From: stanger@otago.ac.nz (Nigel Stanger)
  1062. Subject: Where should help files be kept?
  1063. Date: 5 Jun 92 02:34:09 GMT
  1064. Organization: University of Otago, Dunedin, New Zealand
  1065.  
  1066. Where is the best place to keep help files? A couple of days ago
  1067. I figured out how to put my balloon help and associated stuff
  1068. into a separate file (really trivial when you think about it),
  1069. and it chops about 15K off the size of the app (quite significant
  1070. when the app is only ~65K to start with). At the moment, the help
  1071. file has to be in the same folder as the app, which really isn't
  1072. that much of a problem, but I was wondering if there was any
  1073. "official" place to store these sorts of files? I couldn't see
  1074. anything obvious in IM6.
  1075.  
  1076. Just as an aside, I was poking around in  when I discovered that
  1077. the Finder knows that "Finder Help" is supposed to go in the
  1078. Extensions Folder. "Aha!" I thought, "what type of file is it?" I
  1079. had a look and it was "help"/"MACS". "AHA!" I thought a bit
  1080. louder, "is this a generic help-file type?" Unfortunately, after
  1081. a bit of playing around I found that this appears to be the file
  1082. type for the Finder Help file itself. If you set the type of any
  1083. other file to be "help", turn on balloons and pop the cursor over
  1084. the file, you get the balloon for Finder Help! So much for that
  1085. idea :(
  1086.  
  1087. - -- 
  1088. See ya
  1089.                                 Nigel.
  1090. - ----------------------------------------------------------------------
  1091. Nigel Stanger,                  Internet: stanger@otago.ac.nz
  1092. University of Otago,            Phone: +64 3 479-8179
  1093. Dunedin, NEW ZEALAND.           Fax:   +64 3 479-8311
  1094. "I fart in your general direction!" -- Frenchman, MPatHG
  1095.  
  1096. +++++++++++++++++++++++++++
  1097.  
  1098. From: grobbins@Apple.COM (Grobbins)
  1099. Date: 6 Jun 92 17:40:24 GMT
  1100. Organization: Apple DTS
  1101.  
  1102. In article <1992Jun5.153409.2889@otago.ac.nz> stanger@otago.ac.nz (Nigel Stanger) writes:
  1103. >Where is the best place to keep help files?
  1104.  
  1105. The System folder (and its subfolders) should contain only files to
  1106. be used by the local machine.  Since presumably an application may
  1107. be run over a network, don't put the help files there (and please
  1108. don't ask me why Finder help is in the Extensions folder.)
  1109.  
  1110. In general, keeping a help file in the same folder as the application
  1111. or in a subfolder of that directory would be appropriate.  Track it
  1112. (perhaps with an alias stored in the prefs file) and, if it can't
  1113. be located, do something reasonable (like PBCatSearch, StandardGetFile,
  1114. or DebugStr.)
  1115.  
  1116. [And to answer the usual code question: an app can find its own location
  1117. with GetCurrentProcess/GetProcessInfo, PBGetFCBInfo, GetVol/GetWDInfo, or 
  1118. your favorite alternative.]
  1119.  
  1120. >Just as an aside, I was poking around in  when I discovered that
  1121. >the Finder knows that "Finder Help" is supposed to go in the
  1122. >Extensions Folder....  If you set the type of any
  1123. >other file to be "help", turn on balloons and pop the cursor over
  1124. >the file, you get the balloon for Finder Help! 
  1125.  
  1126. The Finder is from Special-Case City.  System software is _not_ example
  1127. code.
  1128.  
  1129. Grobbins            grobbins@apple.com
  1130.  
  1131. Usual disclaimers apply.
  1132.  
  1133.  
  1134. ---------------------------
  1135.  
  1136. End of C.S.M.P. Digest
  1137. **********************
  1138.